/**
 * 减法算式子类
 * 实现减法运算的具体逻辑
 */
public class SubtractionCalculation extends AbstractCalculation {
    
    /**
     * 构造函数
     * @param operand1 第一个操作数（被减数）
     * @param operand2 第二个操作数（减数）
     */
    public SubtractionCalculation(int operand1, int operand2) {
        // 调用父类构造函数，指定运算符为 '-' 
        super(operand1, operand2, '-');
    }
    
    /**
     * 实现计算结果的方法
     * 对于减法，确保结果不为负数
     * @return 计算结果
     */
    @Override
    protected int calculateResult() {
        // 执行减法运算
        int diff = operand1 - operand2;
        
        // 确保结果不为负数
        // 在实际应用中，应该在生成题目时就确保这一点
        // 这里进行验证，防止异常情况
        if (diff < 0) {
            throw new IllegalArgumentException("减法结果不能为负数: " + operand1 + " - " + operand2 + " = " + diff);
        }
        
        return diff;
    }
    
    /**
     * 静态工厂方法：创建一个有效的减法算式
     * 确保结果不为负数
     * @return 有效的减法算式
     */
    public static SubtractionCalculation createValidSubtraction() {
        int operand1, operand2;
        
        // 生成第一个操作数（0-100）
        operand1 = (int)(Math.random() * 101);
        // 生成第二个操作数，确保结果不为负数（即第二个操作数不大于第一个操作数）
        operand2 = (int)(Math.random() * (operand1 + 1));
        
        return new SubtractionCalculation(operand1, operand2);
    }
}